package com.zmr.wx.mp.handler;

import java.util.Map;

import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import com.zmr.wx.mp.builder.TextBuilder;
import com.zmr.wx.mp.robot.RebotProxy;
import com.zmr.wx.mp.utils.SpringUtils;

import me.chanjar.weixin.common.api.WxConsts.XmlMsgType;
import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.common.session.WxSessionManager;
import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage;
import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage;

/**
 * @author Binary Wang(https://github.com/binarywang)
 */
@Component
public class MsgHandler extends AbstractHandler
{
    @Value("${rebot.use}")
    private String rebotName;

    @Override
    public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, Map<String, Object> context, WxMpService weixinService,
            WxSessionManager sessionManager)
    {
        if (!wxMessage.getMsgType().equals(XmlMsgType.EVENT))
        {
            // TODO 可以选择将消息保存到本地
        }
        // 当用户输入关键词如“你好”，“客服”等，并且有客服在线时，把消息转发给在线客服
        try
        {
            if (StringUtils.startsWithAny(wxMessage.getContent(), "你好", "客服")
                    && weixinService.getKefuService().kfOnlineList().getKfOnlineList().size() > 0)
            {
                return WxMpXmlOutMessage.TRANSFER_CUSTOMER_SERVICE().fromUser(wxMessage.getToUser())
                        .toUser(wxMessage.getFromUser()).build();
            }
        }
        catch (WxErrorException e)
        {
            e.printStackTrace();
        }
        // TODO 组装回复消息
        // String content = "收到信息内容：" + JsonUtils.toJson(wxMessage);
        RebotProxy rebotProxy = SpringUtils.getBean(rebotName);
        String content = rebotProxy.botMessageReply(wxMessage.getContent());
        return new TextBuilder().build(content, wxMessage, weixinService);
    }
}
